﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.hermite
    Hermite插值
    参数 x: x[n]存放n个给定的有序结点值。
    参数 y: y[n]存放n个给定结点上的函数值。
    参数 dy: dy[n]存放n个给定结点上的一阶导数值。
    参数 n: n给定结点的个数。
    参数 t: t指定插值点值。
    返回值 函数返回指定插值点t处的函数近似值。
    */

    public static string drive_hermite(int w, int h)
    {
        double[] x = new double[10] { 0.1, 0.15, 0.3, 0.45, 0.55, 0.6, 0.7, 0.85, 0.9, 1.0 };
        double[] y = new double[10] { 0.904837, 0.860708, 0.740818, 0.637628, 0.576950, 0.548812, 0.496585, 0.427415, 0.406570, 0.367879 };
        double[] dy = new double[10];
        for (int i = 0; i <= 9; i++) dy[i] = -y[i];

        int pk = 10;
        double[] px = new double[(x.Length - 1) * pk + 1];
        double[] py = new double[(y.Length - 1) * pk + 1];
        for (int i = 0; i < x.Length - 1; i++)
        {
            for (int j = 0; j <= pk; j++)
            {
                px[i * pk + j] = x[i] + (x[i + 1] - x[i]) * ((double)j / (double)pk);
                py[i * pk + j] = gl.hermite(x, y, dy, x.Length, px[i * pk + j]);
            }
        }

        return html_image(w, h, px, py,
            new double[] { 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0 },
            new double[] { 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 },
            x,
            y
        );
    }
}